// http/index.ts
import axios from 'axios'
import { getToken } from './token-util';
import { ElMessage } from 'element-plus';
import { vueRouter, vueRouteDefine } from './my-vue-router';

// 如果POST需要路径传参，添加下面的config到post调用中
// {headers: {'Content-Type': 'application/x-www-form-urlencoded'}

// axios实例
export const myAxios = axios.create({
    baseURL: import.meta.env.VITE_BASE_API,
    // 是否携带cookie
    withCredentials: true,
    // 10秒超时
    timeout: 10000,
})

//请求拦截器 
// TODO token刷新
myAxios.interceptors.request.use(
    (config: any) => {
        // 每次发送请求之前判断是否存在token，如果存在，则统一在http请求的header都加上token，不用每次请求都手动添加了
        const token = getToken()
        token && (config.headers.Authorization = 'Bearer ' + token)
        return config
    },
    (error) => {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
);

//响应拦截器
myAxios.interceptors.response.use(
    (response) => {
        return response;
    },
    (error) => {
        // 响应错误
        if (error.request.readyState == 4) {
            if (error.request.status == 403) {
                ElMessage.error('登录状态失效')
                // 403 直接跳转至登录页面
                vueRouter.replace(vueRouteDefine.login)
            } else {
                ElMessage.error('服务器异常')
            }
        }
        return Promise.reject(error);
    }
);
